package 案例;

//复制一个文件
//启动程序之后，用户输入文件路径(绝对路径)，再输入要复制过去的目标路径
//这个文件路径对应的是 普通文件，而非目录文件
//复制这个普通文件

import java.io.*;
import java.util.Scanner;

public class 案例2 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要复制文件的绝对路径：");
        String rootPath=scanner.next();
        File rootFile=new File(rootPath);
        if (!rootFile.isFile()) {
            //不是普通文件
            System.out.println("普通文件的路径错误，程序退出！");
            return;
        }

        System.out.println("请输入要复制到的目标路径：");
        String destPath=scanner.next();
        //要求 destFile这个文件不存在
        File destFile=new File(destPath);
        if (destFile.exists()) {
            System.out.println("目标路径已经有文件了，退出！");
            return;
        }
        if (!destFile.getParentFile().exists()) {
            //父级目录不存在
            System.out.println("目标路径的父目录不存在，退出！");
            return;
        }

        //复制操作
        //打开 待复制的文件，读取出每个字节，把每个字节写入目标文件中
        try(InputStream inputStream=new FileInputStream(rootFile);
            OutputStream outputStream=new FileOutputStream(destFile)) {

            //从 inputStream中按照字节读
            //把读到的结果写到 outputStream中
            while (true) {
                byte[] buffer=new byte[1024];
                int len = inputStream.read(buffer);
                if (len==-1) {
                    break;
                }
                outputStream.write(buffer,0,len);
            }
            outputStream.flush();//不加 flush，触发close也会自动刷新缓冲区

        }catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("复制完成");
    }
}
